'''
迭代器是访问可迭代对象的一个工具：
迭代器是一种访问集合元素的方式，它允许我们逐个访问集合中的元素，而无需一次性将所有元素加载到内存中。
迭代器是易耗损的，用完了，下次再要用，就要重新创建。

迭代器的主要作用包括：
惰性求值：只在需要时生成下一个值，节省内存资源，特别适合处理大数据集或无限序列。
统一接口：通过__iter__()和__next__()方法，为不同类型的可迭代对象提供了一致的访问方式。
支持多种数据结构：可以用于列表、元组、字典、集合、字符串等可迭代对象，也可以自定义实现。

迭代器有两个函数：
iter()
next()

关键点总结
创建迭代器：
可以通过内置函数iter()从可迭代对象（如列表、元组等）创建迭代器。
也可以自定义实现__iter__()和__next__()方法的类来创建迭代器。

使用迭代器：
使用next()函数手动获取下一个值。
在for循环中自动遍历迭代器。

适用场景：
处理大数据集或流式数据时，避免一次性加载所有数据。
实现自定义的数据生成逻辑。
'''

data = [1, 2, 3, 4, 5]

diter = iter(data) # 创建迭代器
print(diter)
print(next(diter)) # 迭代器，一次只能获取一个值
print(next(diter))
print(next(diter))
print(next(diter))
print(next(diter))
# print(next(diter)) # StopIteration
print('-------------------------------------')

# 迭代器再次使用, 需要从新创建一个迭代器
# diter = iter(data)
for i in diter:
    print(i)
print('-------------------------------------')
# 可迭代对象，就不一样，可以多次调用
for i in data:
    print(i)
print('-------------------------------------')
for i in data:
    print(i)